import re
#使用多线程下载整本小说
import concurrent.futures
import requests
import parsel
#导入文件操作模块
import os

def get_reponse(html_url):
    """
    定义发送请求的函数
    :param html_url:  请求链接
    :return: reponse相应对象
    """
    headers={
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'
    }
    reponses = requests.get(url=html_url,headers=headers)
    return reponses

def get_list_url(html_url):
    """
    获取章节url/小说名
    :param html_url:
    :return:
    """
    #调用发送请求函数
    html_data = get_reponse(html_url).text
    #提取小说名字
    name = re.findall('<h1>(.*?)</h1>',html_data)[0]
    #提取章节url
    url_list = re.findall('<dd> <a style="" href="(.*?)">',html_data)
    return name,url_list


def get_content(html_url):
    """
    获取小说内容/小说标题
    :param html_url: 小说章节url
    :return:
    """
    #调用发送请求的函数
    html_data = get_reponse(html_url).text
    #提取数据
    select = parsel.Selector(html_data)
    title = select.css('.bookname h1::text').get()
    #提取内容
    content1 = select.css('#content::text').getall()
    contents_result = '\n'.join(content1)
    return title,contents_result

def save(name,title,content):
    """
    保存数据函数
    :param name: 小说名
    :param title: 章节名
    :param content: 内容
    :return:
    """
    #自动创建一个文件夹
    file = f'{name}\\'
    if not os.path.exists(file):
        os.mkdir(file)
    #title <文件名> '.txt'文件格式  a表示追加保存  encoding编码格式  as表示重命名
    with open(file + name + '.txt', mode='a',encoding='utf-8') as f:
        """
        第一章
           小说内容
        第二章
           小说内容
        """
        f.write(title)
        f.write('\n')
        f.write(content)
        f.write('\n')
    print(title,'已保存')


def main(home_url):
    #index_url = 'http://www.1biqug.net' + home_url
     title,content=get_content(html_url=home_url)
     save(name,title,content)


if __name__ == '__main__':
    url = 'http://www.1biqug.net/book/1376/'
    name,url_list = get_list_url(html_url=url)
    exx = concurrent.futures.ThreadPoolExecutor(max_workers=7)
    for url in url_list:
        index_url = 'http://www.1biqug.net' + url
        exx.submit(main,index_url)
    exx.shutdown()




